package com.xiaolin.token.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName TokenUtils
 * @Description TODO
 * @Detail detail
 * @Author MyPC
 * @Date 2020/9/30
 * @Version 1.0
 */
public class TokenUtils {

    //设置token过期时间，单位是毫秒
    private static final long EXPIRE_DATE=60*1000;
    //token秘钥，可以随便设置
    private static final String TOKEN_SECRET = "ZCEQIUBFKSJBFJH2020BQWE";
    /**
     * 生成token
     * @param username
     * @param password
     * @return
     */
    public static String createToken(String username,String password){
        String token="";
        try {
            //设置过期时间
            Date date=new Date(System.currentTimeMillis()+EXPIRE_DATE);
            //密钥及加密算法
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            //设置头部信息
            Map<String,Object> map=new HashMap<>();
            map.put("typ","JWT");
            map.put("alg","HS256");
            //携带用户名、密码信息，过期时间、生成签名
            token = JWT.create()
                    .withHeader(map)
                    .withClaim("username", username)
                    .withExpiresAt(date)
                    .sign(algorithm);
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
        return token;
    }

    /**
     * 校验token
     * 如果token到了过期时间，那么token就会失效
     * @param token
     * @return
     */
    public static boolean verify(String token){
        try {
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            JWTVerifier verifier = JWT.require(algorithm).build();
            verifier.verify(token);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
}
